/**
 * 状态模式
 */
package behavioralpattern.statepattern;
//状态模式(State Pattern) ：允许一个对象在其内部状态改变时改变它的行为，对象看起来似乎修改了它的类。
//其别名为状态对象(Objects for States)，状态模式是一种对象行为型模式

//状态模式描述了对象状态的变化以及对象如何在每一种状态下表现出不同的行为。
//状态模式的关键是引入了一个抽象类来专门表示对象的状态，这个类我们叫做抽象状态类，
// 而对象的每一种具体状态类都继承了该类，并在不同具体状态类中实现了不同状态的行为，包括各种状态之间的转换。
//在状态模式结构中需要理解环境类与抽象状态类的作用：
//
//环境类实际上就是拥有状态的对象，环境类有时候可以充当状态管理器(State Manager)的角色，可以在环境类中对状态进行切换操作。
//抽象状态类可以是抽象类，也可以是接口，不同状态类就是继承这个父类的不同子类，
// 状态类的产生是由于环境类存在多个状态，同时还满足两个条件： 这些状态经常需要切换，在不同的状态下对象的行为不同。
// 因此可以将不同对象下的行为单独提取出来封装在具体的状态类中，使得环境类对象在其内部状态改变时可以改变它的行为，
// 对象看起来似乎修改了它的类，而实际上是由于切换到不同的具体状态类实现的。
// 由于环境类可以设置为任一具体状态类，因此它针对抽象状态类进行编程，在程序运行时可以将任一具体状态类的对象设置到环境类中，
// 从而使得环境类可以改变内部状态，并且改变行为